package com.pkk.blny.utils;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.commonmark.Extension;
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
import org.commonmark.ext.front.matter.YamlFrontMatterVisitor;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

/**
 * @author : RYAN0UP
 * @date : 2018/11/14
 */
public class MarkdownUtils {

  /**
   * Front-matter插件
   */
  private static final Set<Extension> EXTENSIONS_YAML = Collections.singleton(YamlFrontMatterExtension.create());

  /**
   * Table插件
   */
  private static final Set<Extension> EXTENSIONS_TABLE = Collections.singleton(TablesExtension.create());

  /**
   * 解析Markdown文档
   */
  private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS_YAML).extensions(EXTENSIONS_TABLE)
      .build();

  /**
   * 渲染HTML文档
   */
  private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS_YAML)
      .extensions(EXTENSIONS_TABLE).build();

  /**
   * 渲染Markdown
   *
   * @param content content
   * @return String
   */
  public static String renderMarkdown(String content) {
    Node document = PARSER.parse(content);
    return RENDERER.render(document);
  }

  /**
   * 获取元数据
   *
   * @param content content
   * @return Map
   */
  public static Map<String, List<String>> getFrontMatter(String content) {
    YamlFrontMatterVisitor visitor = new YamlFrontMatterVisitor();
    Node document = PARSER.parse(content);
    document.accept(visitor);
    return visitor.getData();
  }
}
